package net.lqy.aipan.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * @title: CommonUtil
 * @Author lqy
 * @Date: 2025-05-30 12:07
 * @Version 1.0
 */
@Slf4j
public class CommonUtil {
    /**
     * 响应json数据给前端
     *
     * @param response HttpServletResponse 对象，用于向客户端发送响应
     * @param obj      需要转换为JSON的对象
     */
    public static void sendJsonMessage(HttpServletResponse response, Object obj) {

        // 设置响应的内容类型为application/json，并指定字符集为UTF-8
        response.setContentType("application/json; charset=utf-8");

        try (PrintWriter writer = response.getWriter()) {
            // 将对象转换为JSON字符串，并通过PrintWriter写入响应体中
            writer.print(JsonUtil.obj2Json(obj));
            // 刷新缓冲区，确保数据被立即发送到客户端
            response.flushBuffer();
        } catch (IOException e) {
            // 如果在写入过程中发生IO异常，则记录警告日志
            log.warn("响应json数据给前端异常:{}", e);
        }
    }

    /**
     * 根据文件名称获取文件后缀
     */
    public static String getFileSuffix(String fileName) {
        return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    }

    /**
     * 根据文件后缀，生成文件存储：年/月/日/uuid.suffix 格式
     */
    public static String getFilePath(String fileName) {
        String suffix = getFileSuffix(fileName);
        // 生成文件在存储桶中的唯一键
        return StrUtil.format("{}/{}/{}/{}.{}",
                DateUtil.thisYear(),
                DateUtil.thisMonth() + 1,
                DateUtil.thisDayOfMonth(),
                IdUtil.randomUUID(),
                suffix);
    }
}
